/**
 * PART-1 development
 * --------------------------------------------
 * SASS编译CSS文件。
 * 观察www目录文件的变化, 实时更新界面。
 *
 *
 * PART-2 build
 * --------------------------------------------
 * 优化JS CSS IMAGES 文件 复制FONTS。

 * PART-3 如何使用
 * --------------------------------------------
 * gulp watch -- 开发时
 * gulp build -- 发布
 */


// 引入组件
var gulp = require('gulp'),
    browserSync = require('browser-sync'),
    htmlmin = require('gulp-htmlmin'), //html压缩
    imagemin = require('gulp-imagemin'),//图片压缩
    pngcrush = require('imagemin-pngcrush'),
    minifycss = require('gulp-minify-css'),//css压缩
    jshint = require('gulp-jshint'),//js检测
    uglify = require('gulp-uglify'),//js压缩
    concat = require('gulp-concat'),//文件合并
    rename = require('gulp-rename'),//文件更名
    sass = require('gulp-sass'),//文件更名
    gulpSequence = require('gulp-sequence'),
    notify = require('gulp-notify');//提示信息



/****************************** part-1 *****************************************/

// 实时更新浏览器界面
gulp.task('serve', function() {
    browserSync({
        server: {
            baseDir: 'build'
        },
    })
});


gulp.task('lib', function() {
     return gulp.src(['node_modules/frozenui/dist/*/*'])
        .pipe(gulp.dest('build'))
         .pipe(notify({ message: 'lib task ok' }));
});

gulp.task('font', function() {
    return gulp.src(['app/font/*'])
        .pipe(gulp.dest('build/font'))
    .pipe(notify({ message: 'font task ok' }));

});

// 压缩html
gulp.task('html', function() {
    return gulp.src('app/*.html')
        .pipe(htmlmin({collapseWhitespace: true}))
        .pipe(gulp.dest('./build'))
        .pipe(notify({ message: 'html task ok' }));

});

// 压缩图片
gulp.task('img', function() {
    return gulp.src('app/images/*')
        .pipe(imagemin({
            progressive: true,
            svgoPlugins: [{removeViewBox: false}],
            use: [pngcrush()]
        }))
        .pipe(gulp.dest('./build/images/'))
        .pipe(notify({ message: 'img task ok' }));
});


gulp.task('sass-css', function () {
    return gulp.src('app/sass/*.scss')
        .pipe(sass({
            includePaths: [
                'app/sass',
                'node_modules/frozenui/sass',

            ],
            errLogToConsole: true
        }))

        .pipe(gulp.dest('app/css'))
        .pipe(notify({ message: 'sass task ok' }));

});

// 合并、压缩、重命名css
gulp.task('build-css', function() {
    return gulp.src('app/css/*.css')
        .pipe(concat('app.css'))
        .pipe(gulp.dest('build/css'))
        .pipe(rename({ suffix: '.min' }))
        .pipe(minifycss())
        .pipe(gulp.dest('build/css'))
        .pipe(notify({ message: 'build css task ok' }));
});

// 检查js
gulp.task('lint', function() {
    return gulp.src(['app/js/*.js'])
        .pipe(jshint())
        .pipe(jshint.reporter('default'))
        .pipe(notify({ message: 'lint task ok' }));
});

// 合并、压缩js文件
gulp.task('build-js', function() {
    return gulp.src([
        'app/js/*.js',
        // 'app/js/lib/fx.js',
        // 'app/js/lib/fx_methods.js'
        'node_modules/frozenui/lib/zeptojs/fx.js',
        'node_modules/frozenui/lib/zeptojs/fx_methods.js'
    ])
        .pipe(concat('app.js'))
        .pipe(gulp.dest('build/js'))
        .pipe(rename({ suffix: '.min' }))
        .pipe(uglify())
        .pipe(gulp.dest('build/js'))
        .pipe(notify({ message: 'js task ok' }));
});

// 压缩地址js
gulp.task('area-js', function() {
    return gulp.src('app/js/lib/LArea/src/js/LArea.js')
        .pipe(gulp.dest('app/js/lib/LArea/dist/js'))
        .pipe(rename({ suffix: '.min' }))
        .pipe(uglify())
        .pipe(gulp.dest('app/js/lib/LArea/dist/js'))
        .pipe(gulp.dest('build/js/LArea'))
        .pipe(notify({ message: 'area-js task ok' }));
});

//插件复制
gulp.task('plugins', function() {
    return gulp.src([
            'app/js/lib/LArea/dist/js/LArea.min.js',
            'app/js/lib/LArea/dist/js/LAreaData1.js',
            'app/js/lib/LArea/dist/css/LArea.min.css'
        ])
        .pipe(gulp.dest('build/js/LArea'))
        .pipe(notify({ message: 'zepto-fx task ok' }));
});


gulp.task('sass',gulpSequence('sass-css', 'build-css'));
gulp.task('js',gulpSequence(['lint'], ['build-js']));



gulp.task('build', gulpSequence(['lib','plugins','area-js', 'font','img','html','sass','js']));


// 默认任务
gulp.task('default', function(){

    gulp.run('build');

     //监听html文件变化
    gulp.watch('app/*.html', function(){
        gulp.run('html');
    });

    // Watch .css files
    gulp.watch('app/sass/*/*.scss', ['sass-css']);

    gulp.watch('app/sass/*.scss', ['sass-css']);


    gulp.watch('app/css/*.css', ['build-css']);

    // Watch .js files
    gulp.watch('app/js/*.js', ['lint']);
    gulp.watch('app/js/*.js', ['build-js']);

    // Watch image files
    gulp.watch('app/images/*', ['img']);
    //Watch font files
    gulp.watch('app/font/*', ['font']);


    gulp.run('serve');

});